﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Navigation;

namespace RecipeCollection
{
    public class RecipesMngr
    {
        /// <summary>
        /// Används för att spara och hämta/ladda information till applikationen från en fil
        /// </summary>
        private RecipesDAL m_recipesDAL;

        /// <summary>
        /// Används för att bestämma vilken typ av sökning som ska göras - egenskap
        /// </summary> 
        public SearchEngine SearchEngine { get; set; }

        /// <summary>
        /// Listan med recept - egenskap
        /// </summary>
        public List<Recipe> RecipesList { get; set; }
 
        /// <summary>
        /// Standardkonstruktor
        /// </summary>
        public RecipesMngr()
        {
            RecipesList = new List<Recipe>();
            m_recipesDAL = new RecipesDAL();
        }
     
        /// <summary>
        /// Hämtar alla recept
        /// </summary>
        /// <returns>Listan med recept så länge den inte är null</returns>
        public List<Recipe> GetRecipes()
        {
            return RecipesList ?? null;
        }

        /// <summary>
        /// Hämtar ett specifikt recept
        /// </summary>
        /// <returns>Ett receptobjekt</returns>
        public Recipe GetRecipe(int a_index)
        {
            return CheckIndex(a_index) ? RecipesList[a_index] : null;
        }
         

        /// <summary>
        /// Kollar så indexet finns
        /// </summary>
        public bool CheckIndex(int a_index)
        {
            return RecipesList != null && a_index < RecipesList.Count && a_index >= 0;
        }

        /// <summary>
        /// Ta bort ett recept
        /// </summary> 
        public void DeleteRecipe(int a_index)
        {
            if (CheckIndex(a_index))
            {
                RecipesList.RemoveAt(a_index);
            }
        }

        /// <summary>
        /// Lägger till ett recept
        /// </summary>
        public void Add(Recipe a_recipe)
        {
            if (a_recipe != null)
            {
                RecipesList.Add(a_recipe);
            }
        }

        /// <summary>
        /// Editerar ett recept
        /// </summary>
        public void EditRecipes(int a_index, Recipe a_recipe)
        {
            if (CheckIndex(a_index))
            {
                RecipesList.RemoveAt(a_index);
                RecipesList.Insert(a_index, a_recipe);
            }
        }

        /// <summary>
        /// Ladda applikationen med data från en fil
        /// </summary>
        public void LoadRecipes()
        {
            try
            {
                RecipesList = m_recipesDAL.LoadRecipes();
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        /// <summary>
        /// Spara ned datan i applikationen till en fil
        /// </summary>
        public void SaveRecipes()
        {
            try
            {
                if (RecipesList != null && RecipesList.Count > 0)
                {
                    m_recipesDAL.SaveRecipes(RecipesList);
                } 
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }


        /// <summary>
        /// Bestämmer vilken sökmetod som ska användas
        /// </summary>
        /// <param name="searchMethod">Sökmetod</param>
        public void SetSearchMethod(SearchEngine searchMethod)
        {
            SearchEngine = searchMethod;
        }
    }
}
